/**
 * 判断字符串大小写
 * @param {string} str 字符串
 * @param {boolean} returnDescription 是否返回字符串描述，默认为false
 * @returns 0 表示字符串为空或空白字符串, 1 表示全小写, 2 表示全大写, 3 表示首字母大写, 4 表示其他
 *          或者对应的字符串描述
 */
function checkStringCase(str, returnDescription = false) {
  // 定义结果映射
  const resultMap = {
    0: "字符串为空或空白字符串",
    1: "全小写",
    2: "全大写",
    3: "首字母大写",
    4: "其他"
  };

  let result;

  // 如果字符串为空或仅包含空白字符，则返回特定信息
  if (!str || !str.trim()) {
    result = 0;
  }
  // 检查是否全为小写字母
  else if (str.toLowerCase() === str) {
    result = 1;
  }
  // 检查是否全为大写字母
  else if (str.toUpperCase() === str) {
    result = 2;
  }
  // 检查是否只有首字母大写（并且其余都是小写）
  else if (str.charAt(0).toUpperCase() + str.slice(1).toLowerCase() === str) {
    result = 3;
  }
  // 如果不符合上述任何一种情况，则返回其他
  else {
    result = 4;
  }

  return returnDescription ? resultMap[result] : result;
}

// 测试用例
console.log(checkStringCase("hello")); // 输出: 全小写
console.log(checkStringCase("HELLO")); // 输出: 全大写
console.log(checkStringCase("Hello")); // 输出: 首字母大写
console.log(checkStringCase("HeLlO")); // 输出: 其他